 class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }
public class Test {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //创建一个前驱节点0
        ListNode prev=new ListNode(0);
        ListNode cur=prev;
        int carry=0;//进位
        while(l1!=null || l2!=null || carry!=0){//当l1和l2都为空且没有进位时结束循环
            int x= (l1!=null)? l1.val:0;//当l1为空时，x为0
            int y= (l2!=null)? l2.val:0;//当l2为空时，y为0
            int sum=x+y+carry;//求和
            carry=sum/10;//更新进位
            sum=sum%10;//取个位数
            cur.next=new ListNode(sum);//将sum作为新节点加入结果链表
            cur=cur.next;
            if(l1!=null) l1=l1.next;//移动到下一个节点
            if(l2!=null) l2=l2.next;//移动到下一个节点
        }
        return prev.next;
    }
}
